package com.xuelang.pipeline.domain.application.service;

import com.xuelang.pipeline.client.application.dto.ComponentQuery;
import com.xuelang.pipeline.client.common.result.PageRecord;
import com.xuelang.pipeline.domain.application.Component;

import java.util.List;

/**
 * 组件领域服务类
 *
 * @author xiwen.zxg
 * @since 2024/5/15
 */
public interface ComponentDomainService {
    /**
     * 获取组件列表，有过滤条件
     *
     * @param currentPage
     * @param pageSize
     * @param componentQuery
     * @return
     */
    PageRecord<Component> pageList(long currentPage, long pageSize, ComponentQuery componentQuery);
    /**
     * 获取组件列表，有过滤条件
     *
     * @param componentQuery
     * @return
     */
    List<Component> list(ComponentQuery componentQuery);

    /**
     * 新增组件
     *
     * @param component
     * @return
     */
    Component save(Component component);

    /**
     * 更新组件
     *
     * @param component
     * @return
     */
    Boolean update(Component component);
    /**
     * 删除组件
     *
     * @param componentLabel
     * @return
     */
    Boolean delete(String componentLabel);

    /**
     * 判断组件编码是否存在
     *
     * @param applicationCode
     * @param componentCode
     * @return
     */
    Boolean existsCode(String applicationCode, String componentCode);

    /**
     * 判断组件名称是否存在
     *
     * @param applicationCode
     * @param componentCode
     * @param componentName
     * @return
     */
    Boolean existsName(String applicationCode, String componentCode, String componentName);
    /**
     * 查询组件
     *
     * @param componentLabel
     * @return
     */
    Component query(String componentLabel);
    /**
     * 生成全局唯一的五位车牌号
     *
     * @return
     */
    String generateGlobalUniqueLabel();
    /**
     * 判断组件标签是否存在
     *
     * @param uniqueLabel
     * @return
     */
    Boolean existsLabel(String uniqueLabel);

    /**
     * 查询组件详情
     * @param id
     * @return
     */
    public Component queryById(Long id);
}
